#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<string.h>
//
//int main(void)
//{
//    int i=0;
//    int j=0;
//    int k=0;//三个都是用于循环
//    char arr[10000]={0};//这个数组用于存放输入的字符串
//    scanf("%[^\n]%*c",arr);
//    //查看实际输入了多少元素
//    int sz=strlen(arr);//实际元素的个数
//    //题目上面也有提示，每个单词最多20个字母，我们可以试试二维数组，每个单词放在其中一个一维数组里面，连续的空格也放在一起
//
//    //首先为了方便下面的计算，现将所有的分割符换成空格
//    for(i=0;i<sz;i++)
//    {
//        if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z'))
//        {
//            ;
//        }
//        else
//        {
//            arr[i]=' ';
//        }
//    }
//
//    int result[sz][21];//每个单词最高不超过20,按照最大的来设置数组，也就是一个字母算一个单词
//    for(i=0;i<sz;i++)//对输入的字符串进行遍历，sz个元素，那就循环sz次
//    {
//        if(arr[i]==' ')
//        {
//            result[j][k]=arr[i];
//            k++;//当前二维数组j行的第k
//            if(arr[i+1]!=' ' || arr[i+1]=='\0')
//            {
//                result[j][k]='\0';//下一个元素不是空格，就会保存到下一行数组中
//                j++;
//                k=0;
//            }
//        }
//        else
//        {
//            result[j][k]=arr[i];
//            k++;
//            if(arr[i+1]==' ' || arr[i+1]=='\0')
//            {
//                result[j][k]='\0';
//                j++;
//                k=0;
//            }
//        }//最后一个元素在添加到二维数组以后，j还是会+1
//    }
//
//    for(i=j-1;i>=0;i--)
//    {
//        k=0;
//        while(result[i][k]!='\0')
//        {
//            if(result[i][k]!=' ')
//            {
//                printf("%c",result[i][k]);
//                k++;
//            }
//            else
//            {
//                k++;
//            }
//        }
//
//        if(result[i][k-1]!=' '&& i!=0)
//        {
//            printf(" ");
//        }
//    }
//}






//(2)字符串左旋的问题
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB                   左旋四个的情况下就是原样不动
//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//void left_rotate(char* str,int k) {
//	int length = strlen(str);
//	int initial_str = NULL;
//	int practical_k = k%length;//
//	if (practical_k == 0 || practical_k==0) {
//		return;
//	}
//
//	//带旋转的先复制一份
//	char* str_cpy = (char*)malloc(practical_k);	
//	initial_str = str_cpy;
//	strncpy(str_cpy, str, practical_k);//这个函数指定的个个数中有\0就会添加上，没有\0就不会添加上
//
//
//
//	//将后面的字符往前挪
//	while (*(str+practical_k)) {
//		*str = *(str + practical_k);
//		str++;
//	}//停止的时候str刚好剩下前面复制的那些空间
//
//	//将上面的复制的放在最后面
//	while (*str) {
//		*str++ = *str_cpy++;//这样写可能会出现越界访问的情况
//	}//最后停止的时候str刚好在最开始的\0处
//
//	free(initial_str);
//	initial_str = NULL;
//
//}
//






//(3)判断一个字符串是不是另外一个字符串旋转出来的
//这个题需要用到上面的那个左旋     毕竟左旋和右旋是一样的


//int judgment(char* str1, char* str2) {
//	if (strlen(str1) != strlen(str2)) {
//		printf("两字符串无关系");
//		return 0;
//	}
//
//	int length = strlen(str1);
//	char* str_cpy = (char*)malloc(length + 1);
//	int i = 1;
//	while (i < length) {
//		strcpy(str_cpy, str1);
//		if (strcmp(str_cpy, str2)) {
//			printf("两字符串是旋转关系");
//			return 1;
//		}
//		i++;
//	}
//	free(str_cpy);
//	str_cpy = NULL;
//	printf("这两个字符串没有关系 0");
//}
//
//
//int main(void) {
//	char str1[] = "asdfgg";
//	char str2[] = "ggasdf";
//
//	printf("%d",judgment(str1, str2));
//}